//
//  PushViewController.m
//  UIViewControllerTransitionDemo
//
//  Created by Guo Rui on 2017/7/3.
//  Copyright © 2017年 GR Harry. All rights reserved.
//

#import "PushViewController.h"
#import "SceneryDetailViewController.h"
#import "PushAnimator.h"


@interface PushViewController ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UINavigationControllerDelegate>
@property (strong, nonatomic) NSMutableArray *scenerys;
@property (strong, nonatomic) UICollectionView *collectionView;

@property (strong, nonatomic) NSIndexPath *selectedIndexPath;
@end

@implementation PushViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupDataSource];
    [self setupViews];
}


#pragma mark - UICollectionDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    Scenery *scenery = [self.scenerys objectAtIndex:indexPath.row];
    
    SceneryDetailViewController *vc = [[SceneryDetailViewController alloc] init];
    vc.image = scenery.picture;
    vc.introduce = scenery.introduce;
    vc.place = scenery.place;
    self.navigationController.delegate = self;
    [self.navigationController pushViewController:vc animated:YES];
}

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                               fromViewController:(UIViewController *)fromVC
                                                 toViewController:(UIViewController *)toVC {
    if (operation == UINavigationControllerOperationPush) {
        return [[PushAnimator alloc] init];
    }
    
    return nil;
}



























































#pragma mark - Public
- (SceneryCell *)cellForSelected {
    self.selectedIndexPath = [[self.collectionView indexPathsForSelectedItems] firstObject];
    SceneryCell *cell = (SceneryCell *)[self.collectionView cellForItemAtIndexPath:self.selectedIndexPath];
    return cell;
}

#pragma mark - UICollectinViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.scenerys.count;
}

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    Scenery *scenery = [self.scenerys objectAtIndex:indexPath.item];
    
    SceneryCell *cell = (SceneryCell *)[collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([SceneryCell class]) forIndexPath:indexPath];
    [cell setPicture:scenery.picture];
    [cell setPlace:scenery.place];
    return cell;
}


#pragma mark - UICollectionViewDelegateFlowLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    Scenery *scenery = self.scenerys[indexPath.row];
    
    CGFloat imageWidth = CGRectGetWidth(self.view.frame) - 2 * 10.f;
    CGFloat imageHeight = imageWidth * scenery.picture.size.height / scenery.picture.size.width;
    
    return CGSizeMake(CGRectGetWidth(self.view.frame), imageHeight + 40.f);
}

#pragma mark - Private
- (void)setupViews {
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.minimumLineSpacing = 5.f;
    
    self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds
                                             collectionViewLayout:layout];
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    self.collectionView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.collectionView];
    
    [self.collectionView registerClass:[SceneryCell class] forCellWithReuseIdentifier:NSStringFromClass([SceneryCell class])];
}

- (void)setupDataSource {
    self.scenerys = @[].mutableCopy;
    
    NSArray *places   = @[@"马累",@"萨芙莉岛",@"菲哈后岛",@"阿里度岛",@"马尔代夫卡努呼拉岛",@"马尔代夫柠檬岛"];
    NSArray *pictures = @[@"pic_1", @"pic_2", @"pic_3", @"pic_4", @"pic_5", @"pic_6"];
    NSArray *intros   = @[@"    马累位于北马累环礁的南部边缘，马尔代夫的首都和人口最多的城市，同时也是世界上最小的首都之一。该城市是印度洋上重要的军事及交通要地，是红海、波斯湾至太平洋的重要停泊港。马累是一座很小的城市，只用单车就可，有时步行成为观赏这座城市的最佳方式。这座城市最大的特色在于纯天然，街道上没有刻意铺整的柏油路，放眼望去尽是晶亮洁白的白沙路，皇宫和政府机关等都是两层式平房，非常整洁，屋外花园长满了各种果树。环境恬静而秀丽，街道两旁高大挺拔的椰子树与各种热带地区特有的奇花异草相映生辉，五颜六色的房屋和白色的珊瑚礁完美融合。在市中心可以游览苏丹花园，参观国家博物馆，了解马累的自然和人文。",
                          @"    萨芙莉岛，位于马尔代夫北阿里环礁的中心位置，是马尔代夫性价比最高的的度假岛屿之一，萨芙莉岛因环绕细腻粉质沙滩，水晶般清澈的泻湖水和房屋珊瑚礁吸而引着浮潜和潜水爱好者前往此旅游，其葱郁繁茂的热带花园美景将带给您清新宜人的感觉。它的面积将近3000平方米，距离马累国际机场60km, 乘坐水上飞机飞行70分钟即可到达。",
                          @"菲哈后岛，在印度洋宽广的蓝色海域中，有一串如同被白沙环绕的绿色岛屿——马尔代夫群岛。许多游客在领略过马尔代夫的蓝、白、绿三色后，都认为它是地球上最后的乐园。有人形容马尔代夫是上帝抖落的一串珍珠，也有人形容是一片碎玉，这两种形容都很贴切，白色沙滩的海岛就像一粒粒珍珠，而珍珠旁的海水就像是一片片的美玉。西方人喜欢称呼马尔代夫为“失落的天堂”。",
                          @"    阿里度岛，位于哈里夫环礁，距离机场298千米，内陆飞机45分钟加快艇15分钟。",
                          @"    马尔代夫卡努呼拉岛,一个位于印度洋之上精致的岛屿，座落在1000 米长白色沙滩之上，这沙滩岛屿是处在卡努呼拉岛一个浅泻湖的碧绿湖水中，这里为您提供众多的住宿设施和服务。度假村隐蔽而宁静，为您提供了一个私人的、不受干扰的度假环境。岛屿自然环境优美。海滩别墅和豪华别墅提供有独立的阳台和私人海滨。水上别墅和豪华别墅是座落在泻湖之上，提供有独立的梯子直接到达水晶般清澈的湖水。所有的客房都可观赏到印度洋美景，手工做成的国王大床提供有埃及棉被，还有空调、卫星电视、 CD/DVD播放器、高速因特网连接、别墅内酒吧、茶和咖啡机、宽敞的开放式浴室及淋浴设施。卡努呼拉岛是一个非常受欢迎的岛屿度假村，独特的别墅度假村，提供一流的设施和服务。这个岛屿位于迷人的美景之中，以热带自然美景作背景，让人感觉舒适、优雅自愉悦。",
                          @"    马尔代夫柠檬岛，因被一个叫“J酒店集团”的收购，所以又称“J岛”。它有着质朴的海滩和宁静的设施，从马累乘坐内陆航班花费50分钟到达Hanimado机场，在这旅途中可以欣赏到风景如车的岛屿风景。该岛于2007年底全新装修开业，其岛屿形状非常特别，是一个几乎正圆形的珊瑚岛。其卖点一是内陆飞机可饱览马尔代夫美景，二是岛上植被特别丰富，是一般马代岛屿所没有的，三是复式水上屋比较有特色。在促销期间的性价比还是不错的。 "];
    for (int index = 0; index < 6; index++) {
        NSDictionary *dic = @{ @"picture"   : [UIImage imageNamed:pictures[index]],
                               @"place"     : places[index],
                               @"introduce" : intros[index]};
        Scenery *scenery = [[Scenery alloc] initWithDictionary:dic];
        [self.scenerys addObject:scenery];
    }
}



@end

@implementation Scenery

- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
    if (self = [super init]) {
        self.picture = [dictionary objectForKey:@"picture"];
        self.place      = [dictionary objectForKey:@"place"];
        self.introduce  = [dictionary objectForKey:@"introduce"];
    }
    return self;
}

@end
